﻿package com.cqwu.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
t * 验证类
 * 1. 表单验证
 * 2. sql注入漏洞验证
 * @author :LK
 * 
 */
public class MyValidator {

	/**
	 * 验证字符串是否为空,null
	 * @param 待验证的字符串
	 * @return 如果为不为空或者不为null返回true，否则返回false
	 */
	public boolean checkIsString(String str) {
		if (str != null && !"".equals(str)) {
			return true;
		}
		return false;
	}

	/************************** 表单验证 ***************************************/

	/**
	 * 验证用户名
	 * @param str  验证的字符串
	 * @return boolean 如果字符串中只含有  字母  数字和_ .@字符 并 且开头的字符只能是字母或者数字返回true，否则返回false
	 */
	public boolean isLoginName(String str) {
		String regex = "^[a-zA-Z0-9][a-zA-Z0-9//_//.//@]*$";
		return match(regex, str);
	}

	/**
	 * 验证邮箱
	 * @param  待验证的字符串
	 * @return 如果是符合的字符串,返回 true ,否则返回 false
	 */
	public boolean isEmail(String str) {
		String regex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
		return match(regex, str);
	}

	/**
	 * 验证IP地址
	 * @param 待验证的字符串
	 * @return 如果是符合格式的字符串,返回true,否则为false
	 */
	public boolean isIP(String str) {
		String regex = "\\d+\\.\\d+\\.\\d+\\.\\d+$";
		return match(regex, str);
	}

	/**
	 * 验证网址Url
	 * @param 待验证的字符串
	 *[ \\w-]+   表示的一个或多个字符[a-zA-Z-],+号表示一个或多个
	 * @return 如果是符合格式的字符串,返回true,否则为false
	 */
	public boolean IsUrl(String str) {
		String regex = "(http(s)?://)?([\\w-]+\\.)+[\\w-#]+(:[\\w-#]+)?(/[\\w- ./?%&=#!]*)?";
		return match(regex, str);
	}


	/**
	 * 验证输入密码条件
	 * 
	 * @param 待验证的字符串   （只能是字符，数字或者下划线，长度6-16位）
	 * @return 如果是符合格式的字符串,返回 true ,否则为 false 
	 */
	public boolean IsPassword(String str) {
		String regex = "^[a-zA-Z]?\\w{5,20}$";
		return match(regex, str);
	}

	/**
	 * 验证输入任意字符只能是 (minLength-maxlength位)
	 * 
	 * @param 待验证的字符串
	 *            ,允许最小长度为minLength,允许最大长度maxLength
	 * @return 如果是符合格式的字符串,返回  true  ,否则为  false  
	 */
	public boolean IsMaxLength(String str, int minLength, int maxLenth) {
		String regex = "^.{" + minLength + "," + maxLenth + "}$";
		return match(regex, str);
	}

	/**
	 * 验证输入邮政编号
	 * 
	 * @param str 待验证的字符串
	 * @return 如果是符合格式的字符串,返回 true ,否则为 false
	 */
	public boolean IsPostalcode(String str) {
		String regex = "^\\d{6}$";
		return match(regex, str);
	}

	/**
	 * 验证输入手机号码
	 * 
	 * @param str 待验证的手机号码
	 * @return 如果是正确的电话格式，返回true,反则返回false
	 */
	public boolean IsTelPhone(String str) {
		String regex = "[1][3|5|7|8][0-9]{9}";
		return match(regex, str);
	}

	/**
	 * 验证输入电话号码
	 * 
	 * @param 待验证的字符串
	 * @return 如果是符合格式的字符串,返回 true ,否则为 false
	 */
	public boolean IsPhone(String str) {
		String regex = "[0-9]{11}";
		return match(regex, str);
	}

	/**
	 * 验证输入身份证号
	 * 
	 * @param 待验证的字符串
	 * @return 如果是符合格式的字符串,返回 true ,否则为 false 
	 */
	public boolean IsIDcard(String str) {
		String regex = "(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X|x)$)";
		return match(regex, str);
	}

	/**
	 * 验证输入一年的12个月
	 * 
	 * @param 待验证的字符串
	 * @return 如果是符合格式的字符串,返回true ,否则为 false 
	 */
	public boolean IsMonth(String str) {
		String regex = "^([0-2][1-9]|3[0-2])$";
		return match(regex, str);
	}

	/**
	 * 验证输入一个月的31天
	 * 
	 * @param 待验证的字符串
	 * @return 如果是符合格式的字符串,返回 true ,否则为 false
	 */
	public boolean IsDay(String str) {
		String regex = "^((0?[1-9])|((1|2)[0-9])|30|31)$";
		return match(regex, str);
	}

	/**
	 * 验证日期时间
	 * 
	 * @param 待验证的字符串
	 *            时间的格式:2014-2-15
	 * @return 如果是符合网址格式的字符串,返回 true ,否则为 false 
	 */
	public boolean isDate(String str) {
		String regex = "^(19[0-9][0-9]|2[0-1][0-9][0-9])-(((1|3|5|7|8|10|12)-([0-9]|[1-2][0-9]|30|31))|((4|6|9|11)-([1-2][0-9]|30))|((2)-([1-2][0-9])))";
		return match(regex, str);
	}

	/**
	 * 验证数字输入
	 * 
	 * @param 待验证的字符串
	 * @return 如果是符合格式的字符串,返回true ,否则为 false
	 */
	public boolean IsNumber(String str) {
		String regex = "^[0-9]*$";
		return match(regex, str);
	}

	/**
	 * 验证非负整数
	 * 
	 * @param  待验证的字符串
	 * @return 如果是符合格式的字符串,返回 true ,否则为 false  
	 */
	public boolean IsIntNumber(String str) {
		String regex = "^(0|[1-9]\\d*)$";
		return match(regex, str);
	}

	/**
	 * 验证大写字母
	 * 
	 * @param 待验证的字符串
	 * @return 如果是符合格式的字符串,返回  true  ,否则为  false  
	 */
	public boolean IsUpChar(String str) {
		String regex = "^[A-Z]+$";
		return match(regex, str);
	}

	/**
	 * 验证小写字母
	 * 
	 * @param 待验证的字符串
	 * @return 如果是符合格式的字符串,返回  true  ,否则为  false  
	 */
	public boolean IsLowChar(String str) {
		String regex = "^[a-z]+$";
		return match(regex, str);
	}

	/**
	 * 验证输入字母
	 * 
	 * @param 待验证的字符串
	 * @return 如果是符合格式的字符串,返回  true  ,否则为  false  
	 */
	public boolean IsLetter(String str) {
		String regex = "^[A-Za-z]+$";
		return match(regex, str);
	}

	/**
	 * 验证输入汉字
	 * 
	 * @param  待验证的字符串
	 * @return 如果是符合格式的字符串,返回  true  ,否则为  false  
	 */
	public boolean IsChinese(String str) {
		String regex = "^[\\u4e00-\\u9fa5]{0,}$";
		return match(regex, str);
	}

	/**
	 * 验证输入字符串长度至少是多少位
	 * 
	 * @param 待验证的字符串
	 * @return 如果是符合格式的字符串,返回  true  ,否则为  false  
	 */
	public boolean IsLength(String str,int len) {
		String regex = "^.{"+ len +",}$";
		return match(regex, str);
	}

	/**
	 * @param regex
	 *            正则表达式字符串
	 * @param str
	 *            要匹配的字符串
	 * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
	 */
	private boolean match(String regex, String str) {
		boolean flag = false;
		if (str != null) {
			Pattern pattern = Pattern.compile(regex);
			Matcher matcher = pattern.matcher(str);
			flag = matcher.matches();
		}
		return flag;
	}


	/**
	 * 验证传真号码 
	 * 
	 * @param fax
	 * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false
	 */
	public boolean isFax(String fax) {
		String regex = "^(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$";
		return match(regex, fax);
	}

	public boolean isFloastnumber(String number) {
		String str = "^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$";
		return Pattern.matches(str, number);
	}

	
	 public static void main(String[] args){
		  MyValidator mv = new  MyValidator();
		  mv.IsMonth("22");
	 }
	 

}
